#include "MatrixFile.h"

using namespace std;

// charge une matrice depuis un fichier
bool Matrix::loadFromFile(const std::string& filename, CvMat*& matrix)
{
    FILE* file = fopen(filename.c_str(), "r");

	if(file != NULL)
	{
		unsigned int height, width;
		float value;

		// Read matrix

		if(fscanf(file, "%dx%d\n", &height, &width) != 2)
			return false;

		matrix = cvCreateMat(height, width, CV_32F);

		for(unsigned int i=0 ; i<height ; i++)
		{
			for(unsigned int j=0 ; j<width ; j++)
			{
				if(fscanf(file, "%f ", &value) != 1)
					return false;

				cvmSet(matrix, i, j, value);
			}
        }

		fclose(file);

		return true;
	}

	return false;
}


// enregistre une matrice dans un fichier
bool Matrix::saveIntoFile(const std::string& filename, const CvMat* matrix)
{
	FILE* file = fopen(filename.c_str(), "w+");

	if(file != NULL)
	{
		// Write matrix

		fprintf(file, "%dx%d\n", matrix->height, matrix->width);

		for(int i=0 ; i<matrix->height ; i++)
		{
			for(int j=0 ; j<matrix->width ; j++)
				fprintf(file, "%f ", cvmGet(matrix, i, j));

			fputc('\n', file);
		}

		fclose(file);

		return true;
	}

	return false;
}
